home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / a / a_funk / satellit.tos / SATELLIT / SAT_SOUR.TXT / PACSAT.GFA < prev    next >
Encoding:
Text File  |  1995-04-30  |  6.4 KB  |  198 lines

  1. 09Sep90/1409  Subject: Satelliten-Datensammler  de DL6DBN @ DB0SGL
  2.  
  3. Das folgende Dateiformat und Programm könnte für Beobachter der PACSATs
  4. interessant sein.
  5.  
  6. Zur Erinnerung "PACSATs" sind Amateurfunksatelliten mit einer Packet-
  7. Radio Nutzlast an Bord. Das sind die Satelliten:
  8. UoSAT-OSCAR 14    mit "Mailbox", Digipeater und 9600 BpS FSK
  9. AMSAT-OSCAR 16    mit     "          "      und 1200 BpS PSK
  10. DOVE-OSCAR 17     mit Sprache und Bulletins in 1200 BpS AFSK
  11. WEBERSAT-OSCAR 18 mit Bild-,Teilchen-,Spektralexperimenten und 1200 PSK
  12. LUSAT-OSCAR 19    mit "Mailbox", Digipeater und 1200 BpS PSK
  13. Fuji-OSCAR 20     mit Mailbox
  14.  
  15. Das nachfolgende Programm wurde u. a. zum Einsammeln der Experimental-
  16. daten von WO-18 in GfA-BASIC 2.0 geschrieben. Es schaltet den TNC in
  17. den HOST-Mode (WA8DED oder TheFirmware nötig) und sammelt die vorgege-
  18. benen Daten im Monitormodus. Auf dem Bildschirm werden der empfangene
  19. Header und danach die evtl. zugehörigen Daten angezeigt. Die Daten wer-
  20. den dabei im vollen Atari-Zeichensatz dargestellt (0x00 bis 0xFF), um
  21. auch binäre Daten in einer angemessenen Form darzustellen (vielleicht
  22. steht ja was lesbares drin).
  23.  
  24. Viel entscheidender ist aber, daβ die Daten gleichzeitig in einem beson-
  25. deren Format auf Diskette (am besten RAMDISK) gespeichert werden. Damit
  26. stehen sie für eine spätere Auswertung zur Verfügung. Das kann zum Bei-
  27.  
  28. spiel die Berechnung der Telemetriewerte, die Bildregenerierung oder das
  29. Erstellen von Dateien aus Broadcastsendungen von UO-14, AO-16, oder LO-19
  30. sein.
  31.  
  32. Wie sieht diese Fornat nun aus?
  33.    Beim Öffnen des Files wird znächst ein Fileheader abgespeichert, durch
  34. den später die Dateiart erkannt werden kann. Er sieht folgendermaβen
  35. aus:
  36. 8 Bytes Formatbezeichner, immer "6DBN_DAT"
  37. 8 Bytes zur freien Verfügung (z.B. eigenes Rufzeichen oder Name)
  38. 2 Byte  Attribute (bisher immer 0)
  39. CR
  40. LF
  41. Dann folgen die eigentlichen Daten.
  42.    Als erstes wird der Header abgespeichert, damit man immer weiβ was
  43. das nachfolgende Datenpaket überhaupt enthalten soll. Am Ende des Headers
  44. kommt ein CR+LF. Dadurch wird es möglich den Header z.B. mit "LINE INPUT"
  45. in einem Stück zu lesen.
  46.    Handelt es sich um Pakete vom Typ "Iab" oder "UI" dann kommen nach-
  47. folgende Informationen, ansonsten der nächste Header.
  48.    Das nächste Byte danach ist die Länge der nachfolgenden Daten minus
  49. eins. Also 1 Byte Daten (weniger geht nach AX.25 nicht) entspricht einem
  50. Längenbyte von 0, und 255 entsprächen 256 Datenbytes (mehr geht auch
  51. nicht).
  52.    Nun kann man zum Beispiel mit "INPUT$ (laenge+1,#..)" die komplette
  53. Information schnell in einen String einlesen.
  54.    Danach käme gleich der nächste Header, usw. Am besten sieht man sich
  55. eine der erzeugten Dateien mal mit einem HEX-Monitor an.
  56.  
  57. Noch ein paar Worte zum Programm. Zunächst wird man gefragt welche Pakete
  58. überhaupt gesammelt werden sollen. Die Angaben entsprechen denen des
  59. WA8DED Terminalmodus (also I, U, S und die Callistenzeiger + oder -).
  60. Dann erscheint eine Fileselectbox wo der Name der Zieldatei angegeben
  61. werden kann. Existiert die Datei bereits werden alle neuen Daten an die
  62. alte Datei angehängt. Dann beginnt das Sammeln. Abbrechen kann man mit
  63. ESC. Und da hakt das Programm etwas wenn keine Daten mehr vom TNC kommen.
  64. Evtl. muβ man ESC mehrmals drücken. Vor dem Verlassen des Programms
  65. wird die Datei geschlossen und der Monitormodus des TNC abgschaltet
  66. (M N +).
  67.  
  68. Zum Sammeln aller Daten von UO-14 ist der HOST-Mode zu langsam. 9600 BpS
  69. auf der Funkstrecke und nur 9600 BpS auf der V.24 Strecke, da muβ irgendwo
  70. was unter den Tisch fallen oder vollaufen. In diesem Fall muβ geziel ge-
  71. sammelt werden (QST,TLM für Satellitendaten oder QST-1 für Broadcast).
  72.  
  73. Viel Spaβ und vielleicht veröffentliche ich auch noch Routinen für die
  74. Webersat-Bilder oder zur Telemetrieberechnung.
  75.  
  76. 73 Frank, DL6DBN @ DB0SGL
  77.  
  78. Und hier das Programm:
  79.  
  80. CLS
  81. PRINT AT(1,2);"         AX.25 - DATA-COLLECTOR for TNC2/Hostmode by F.Sperber, DL6DBN"
  82. PRINT
  83. INPUT "         Which frames to collect ? <IUS+-> : M ",dest$
  84. '
  85. CLS
  86. PRINT AT(1,3);"                                  DATA TO FILE ?"
  87. FILESELECT "\*.*","",name$
  88. IF name$="" THEN
  89.   END
  90. ENDIF
  91. OPEN "U",#11,"AUX:"
  92. OPEN "O",#13,"CON:"
  93. OPEN "O",#14,"VID:"
  94. IF EXIST(name$) THEN
  95.   OPEN "A",#15,name$
  96. ELSE
  97.   OPEN "O",#15,name$
  98.   PRINT #15,"6DBN_DAT";"        ";chr$(0);chr$(0);chr$(13);chr$(10); ! Dateikopf
  99. ENDIF
  100. '
  101. PRINT #11,CHR$(17);CHR$(8);CHR$(8);CHR$(8);   ! TNC frei machen
  102. dummy=XBIOS(15,-1,0,-1,-1,-1,-1)              ! V.24 Handshake aus
  103. WHILE BIOS(1,1)<>0
  104.   dummy=INP(#11)
  105. WEND
  106. PRINT #11,CHR$(27);"JHOST1";CHR$(13);         ! in HOST-Mode
  107. @event_timer(1000,0)
  108. CLS
  109. WHILE BIOS(1,1)<>0                            ! auf's Echo warten
  110.   PRINT CHR$(INP(#11));
  111. WEND
  112. '
  113. cmd$="M"+dest$                                ! Monitor einschalten
  114. @send_cmd
  115. @get_tnc
  116. PRINT "                  <><><> Data collection in progress <><><>"
  117. PRINT "                   Terminate with ESC for several times !"
  118. PRINT
  119. '
  120. REPEAT
  121.   ret$=INKEY$
  122.   EXIT IF ret$=CHR$(27)
  123.   @poll_tnc
  124.   @get_tnc
  125. UNTIL INKEY$=CHR$(27)
  126. '
  127. cmd$="MN+"         ! Monitor ausschalten
  128. PRINT cmd$
  129. @send_cmd
  130. @get_tnc
  131. cmd$="JHOST0"      ! HOST-Mode verlassen
  132. PRINT cmd$
  133. @send_cmd
  134. @get_tnc
  135. CLOSE #11
  136. CLOSE #13
  137. CLOSE #14
  138. CLOSE #15
  139. dummy=XBIOS(15,-1,1,-1,-1,-1,-1)  ! X-ON/X-OFF einschalten
  140. END
  141. '
  142. PROCEDURE send_cmd
  143.   PRINT #11,CHR$(0);CHR$(1);CHR$(LEN(cmd$)-1);cmd$;
  144.   @event_timer(100,0)       ! Pause für Accessories einlegen
  145. RETURN
  146. PROCEDURE poll_tnc
  147.   PRINT #11,CHR$(0);CHR$(1);CHR$(0);"G";
  148.   @event_timer(100,0)       ! Pause für Accessories einlegen
  149. RETURN
  150. PROCEDURE get_tnc
  151.   a%=INP(#11)
  152.   code%=INP(#11)
  153.   IF code%=4 OR code%=5 THEN   ! I oder UI Header
  154.     @get_header
  155.   ELSE
  156.     IF code%=6 OR code%=7 THEN  ! I oder UI Daten
  157.       @get_info
  158.     ELSE
  159.       IF code%<>0 THEN          ! Rest
  160.         @get_nulltermi
  161.       ENDIF
  162.     ENDIF
  163.   ENDIF
  164. RETURN
  165. PROCEDURE get_nulltermi
  166.   resp$=""
  167.   REPEAT
  168.     a%=INP(#11)
  169.     resp$=resp$+CHR$(a%)
  170.   UNTIL a%=0
  171. RETURN
  172. PROCEDURE get_header
  173.   @get_nulltermi
  174.   PRINT #13,resp$
  175.   header$=LEFT$(resp$,LEN(resp$)-1)
  176.   PRINT #15,header$;CHR$(13);CHR$(10);
  177. RETURN
  178. PROCEDURE get_info
  179.   resp$=""
  180.   a%=INP(#11)
  181.   count%=a%+1
  182.   resp$=INPUT$(count%,#11)
  183.   PRINT #15,CHR$(a%);resp$;
  184.   PRINT #14,resp$
  185.   PRINT #13
  186. RETURN
  187. PROCEDURE event_timer(lo%,hi%)
  188.   DPOKE GINTIN,lo%
  189.   DPOKE GINTIN+2,hi%
  190.   DPOKE GCONTRL,24
  191.   DPOKE GCONTRL+2,2
  192.   DPOKE GCONTRL+4,1
  193.   DPOKE GCONTRL+6,0
  194.   DPOKE GCONTRL+8,0
  195.   GEMSYS
  196. RETURN
  197.  
  198.